import os
import db_key_manager
import gm_work_key_manager

curr_id = 1


def get_random_sm4_key_or_iv_bytes():
    return os.urandom(16)

def get_work_key_hex():
    return gm_work_key_manager.get_work_key_hex()



# 测试数据
# 签名
# 私钥：45ebc875cac44a2420eeace261423df663a1f0378c68a26c932e409139d73451
# 公钥：95371cf1c49dc4127bc419622cce2023cfb19227c20517ffc0378f63d0670dd398b97225b18e7f7fc1233bd2eb84c5e0e04b4b1c99ae06bbe4c89b18ce858c26
# 加密
# 私钥：5d1c38bc16b7a69ceb9cfa9cd7026e7011e5568f33f5223f36c767543ac7224c
# 公钥：d6633100664750842ea5ac89f329525d955130b66a0297c57b0f3ea53a44427f64b104796418f480499e6e0f4efdc95b25b9358c3d99f5ba67b06c0b0b431894

def get_db_key_hex(index_str):
    con_result = db_key_manager.get_sm2_key_pairs(curr_id)
    result = None
    if con_result:
        result = con_result[0][index_str]
        if isinstance(result, bytes):
            result = result.hex()
    return result

#TODO:目前为了测试方便，直接返回设置好的公钥hex值。

# 获取接收单位用于验证签名的公钥，在接收到对方发送过来的数据后，使用此公钥来验证数据的签名是否合法，
# 以此确保数据的来源真实性以及完整性，即确认数据确实是由持有对应私钥的发送方发送且在传输过程中未被篡改
def get_receiving_unit_verify_public_key(receiving_unit):
    return '95371cf1c49dc4127bc419622cce2023cfb19227c20517ffc0378f63d0670dd398b97225b18e7f7fc1233bd2eb84c5e0e04b4b1c99ae06bbe4c89b18ce858c26'

# 获取接收单位用于加密数据的公钥，当需要向指定接收单位发送机密信息时，使用此公钥对相关信息（比如对称加密的密钥等）进行加密，
# 只有接收单位使用其对应的私钥才能解密该信息，从而保证了信息在传输给接收单位过程中的保密性
def get_receiving_unit_encrypt_public_key(receiving_unit):
    return 'd6633100664750842ea5ac89f329525d955130b66a0297c57b0f3ea53a44427f64b104796418f480499e6e0f4efdc95b25b9358c3d99f5ba67b06c0b0b431894'

# 获取用于验证签名的公钥（自身相关），在收到其他方发送的数据且对方使用对应的私钥进行了签名时，
# 通过此公钥来验证签名的有效性，保障数据来源可靠以及未被篡改
def get_verify_public_key_hex():
    # return '95371cf1c49dc4127bc419622cce2023cfb19227c20517ffc0378f63d0670dd398b97225b18e7f7fc1233bd2eb84c5e0e04b4b1c99ae06bbe4c89b18ce858c26'
    return get_db_key_hex('signature_public_key')

# 获取用于对数据进行签名的私钥（自身相关），在发送重要数据时，使用此私钥对数据的哈希值等进行签名操作，
# 表明数据是由持有该私钥的主体发出，并且接收方可以通过对应的公钥验证此签名，从而实现不可抵赖性和数据完整性验证
def get_sign_private_key_hex():
    # return '45ebc875cac44a2420eeace261423df663a1f0378c68a26c932e409139d73451'
    return get_db_key_hex('encrypted_signature_private_key')
# 获取用于加密数据的公钥（可能是自身向外发送数据时供对方加密反馈信息等场景使用），
# 对方可以使用此公钥对需要发送给己方的敏感信息进行加密，只有己方使用对应的私钥才能解密，保障信息保密性
def get_encrypt_public_key():
    return get_db_key_hex('encryption_public_key')

# 获取用于解密数据的私钥（对应上面获取加密公钥的场景，用于解密对方用相应公钥加密后发来的数据），
# 只有拥有此私钥才能将接收到的加密信息还原为明文，保障信息的保密性以及只有授权主体可获取信息内容
def get_decrypt_private_key():
    return get_db_key_hex('encrypted_encryption_private_key')
    # return '5d1c38bc16b7a69ceb9cfa9cd7026e7011e5568f33f5223f36c767543ac7224c'

